package kgmyh.fileupload.view;

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

public class DownloadView extends AbstractView{

	@Override
	public String getContentType() {
		return "application/octet-stream"; //다운로드될 파일 타입을 모르겟다..(마임타임?을)
	}
	//응답을 처리하는 메소드
	//1번 인수 : ModelAndView에서의 Model값을 Map 객체에 넣어 넘겨준다.
	@Override
	protected void renderMergedOutputModel(Map map, HttpServletRequest request, //포워드 시키는거 구현되있음
			HttpServletResponse response) throws Exception {        //뷰한테 보여줘랑~ 시킴
		//다운로드  처리할 파일명을 Model을 통해 받는다.
		String fileName=(String)map.get("fileName");//실제이름
		String newFilename=(String)map.get("newFilename");//저장된 이름
		//업로드된 파일이 저장된 디렉토리 조회
		String dir= getServletContext().getRealPath("/upload");//c:\\upload
		File downFile=new File(dir,newFilename);
		//응답처리
		//1.응답 content type 지정
		response.setContentType(getContentType());
		//2.응답 헤더 정보에 다운로드 받을 파일명을 지정한다.  //첨부파일정보
		response.setHeader("Content-Disposition", "attachment; fileName="+new String(fileName.getBytes("euc-kr"),"8859_1"));
		//3.출력 스트림을 통해 파일을 전송
		OutputStream os = response.getOutputStream();
		FileInputStream fi=new FileInputStream(downFile);

		FileCopyUtils.copy(fi, os); //input에서 읽은것을 output으로 출력(copy)

	}
}